Conversation
Make sidecar content searchable via unified FTS
Extends memory_fts with thinking, artifacts, attachments, and voice_notes columns
to enable full-text search across all Claude.ai conversation content types.
## Changes
**Schema Migration (src/db.ts)**
- Add migrateFTSToV2() to extend memory_fts with sidecar columns
- Uses GROUP_CONCAT to flatten multi-row sidecar content into indexed text
- Rebuilds FTS index from existing data; idempotent on re-runs
- Updates triggers to maintain sidecar columns on message insert/delete
**Search Filtering (src/search/index.ts)**
- Add content-type filters: includeThinking, includeArtifacts, includeAttachments, includeVoiceNotes
- Thinking blocks opt-in (privacy-first); artifacts/attachments/voice default enabled
- Uses FTS5 column filter syntax {col1 col2} : query to restrict search
- Weighted BM25 scoring: title=10.0, content=5.0, sidecar=4.0, thinking=3.0, role=1.0
**CLI Flags (src/index.ts)**
- --include-thinking: opt-in for thinking block search
- --no-artifacts, --no-attachments, --no-voice-notes: opt-out from sidecar search
- Applied to both search and recall commands
**Testing (test/search.test.ts)**
- 12 new tests covering artifact/thinking/attachment/voice search
- Tests content-type filtering and filter combinations
- Verifies migration is idempotent and data intact
- Tests that thinking blocks excluded by default
## Indexing
Now searchable:
- Artifact code/documents/diagrams: 434 in claude-web sessions
- Thinking blocks: 102 (opt-in only)
- Attachments with extracted content: 34
- Voice note transcripts: 17
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
feat: v0.3.0 - Copilot, Windows, and CI
Install tests were failing because the smriti binary wasn't in PATH when verification steps ran. Each GitHub Actions step runs in a fresh shell session that doesn't inherit environment variables from previous steps. Changes: - install.sh: Export PATH to current session, persist to shell profiles, verify binary is accessible before completing - install.ps1: Explicitly update $env:PATH for current session (critical for CI), add binary verification step - install-test.yml: Explicitly set PATH in all test steps to handle fresh shell sessions; ensures ~/.local/bin is available across all platforms This fixes exit code 1 (Windows) and 127 (macOS/Linux) failures seen in release v0.3.0. Fixes: Install Test failures on all platforms (Windows, macOS, Ubuntu) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
fix: resolve PATH issues in Install Test (v0.3.1)
…irect bun execution Critical fixes for failed Install Test runs: 1. **QMD Submodule Initialization**: - install.sh: Add --recurse-submodules to git clone and explicit submodule update - install.ps1: Add --recurse-submodules to git clone and explicit submodule update - This fixes "Cannot find module 'qmd/src/memory'" errors on all platforms 2. **PATH Fallback Strategy**: - workflow: Replace direct smriti calls with: smriti cmd || bun direct call - Provides graceful fallback when binary isn't in PATH - Removes shell: bash specification to allow default shell behavior - Ensures commands work whether binary is in PATH or not Root cause of previous failure: shallow clone (--depth 1) without --recurse-submodules doesn't initialize QMD submodule, causing runtime module errors and preventing binary from working. This fixes exit code 1 and 127 failures seen in Install Test on all platforms. Fixes: #24 Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
fix: properly initialize QMD submodule in installations (v0.3.1)
Critical fix: CI mode was using a temporary HOME directory that caused PATH mismatches between install and test steps. Problem: - Install script sets HOME to /tmp/smriti-ci-XXXXX in CI mode - Next workflow step uses runner's original HOME ($HOME = /home/runner) - Binary installed in temp HOME but tests look in runner's HOME - Result: "Module not found" and "command not found" errors Solution: - Remove temp HOME logic from install.sh and install.ps1 - Use runner's actual HOME for installation (cleaned up after job anyway) - Add shell: bash to all test steps to ensure PATH exports work - Keep fallback: smriti || bun direct execution Changes: - install.sh: Remove mktemp HOME assignment - install.ps1: Remove USERPROFILE override - uninstall.ps1: Remove temp HOME logic - install-test.yml: Add shell: bash to all test steps for consistency This ensures tests run with the same HOME where files were installed. Fixes: Install Test failures on all platforms (Windows, macOS, Ubuntu) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Final fix for Install Test failures: temp HOME was causing PATH mismatches between install and test steps. Changes: - install.sh: Remove mktemp temp HOME assignment - install.ps1: Remove USERPROFILE override - uninstall.ps1: Remove temp HOME logic - install-test.yml: Add shell: bash to all test steps This ensures: 1. Files are installed to runner's actual HOME (cleaned up after job) 2. Test steps run bash explicitly (works on all platforms including Windows) 3. PATH exports work correctly across all test steps 4. Binary is found in the same HOME location Fixes: Install Test failures on all platforms (Windows, macOS, Ubuntu) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
fix: remove temp HOME isolation causing PATH mismatches (v0.3.1)
The --version command wasn't implemented, causing the CLI to attempt database initialization before determining the command. This failed in CI where the database file couldn't be opened/created. Solution: Handle --version early (like --help) before database initialization. Also supports -v as a shorthand. This allows 'smriti --version' to work in any environment without requiring database setup. Fixes: "Error: unable to open database file" when running smriti --version Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
fix: add --version command handler (v0.3.1)
Optimization targets Windows install-test slowness by caching Bun binaries and dependencies, plus improving bun install performance. Changes: - install-test.yml: Add cache action for Bun binary (~/.bun) - install-test.yml: Add cache action for QMD database (~/.cache/qmd) - install.sh: Add --no-progress flag to faster bun install fallback - install.ps1: Use --frozen-lockfile for faster cached installs Performance improvements: - Windows: Bun binary reused from cache (skip redownload) - All platforms: Bun modules cached in ~/.bun directory - QMD database pre-warmed from cache (avoids re-initialization) - Fallback install uses --no-progress for reduced output overhead Cache keys: - Bun: keyed by OS + bun.lockb (invalidates on dependency changes) - QMD: simple OS key (persists across runs) Expected impact: - First run: Full install (establishes cache) - Subsequent runs: 40-60% faster on Windows (Bun already downloaded) - All platforms: Faster dependency resolution with cached modules Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
When smriti status (or any command using the database) runs for the first time in a fresh environment (like CI), the parent directory ~/.cache/qmd/ did not exist, causing SQLite to fail with "unable to open database file". Fixed by creating parent directory with mkdirSync(recursive: true) before opening the database connection. Also adds Bun binary caching to install-test.yml workflow for faster CI runs (Bun is read-only, safe to cache unlike the SQLite database). Fixes #28 (install test failures on all platforms) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
fix(ci): ensure QMD database directory exists on first run
On Windows, mkdirSync('.') throws EEXIST error. Skip mkdir when dirname
returns '.' and wrap in try-catch as defensive measure.
Fixes Windows test failure in CI.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
On Windows, mkdirSync('.') throws EEXIST error. Skip mkdir when dirname
returns '.' and wrap in try-catch as defensive measure.
Fixes Windows test failure in CI.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
…abase creation When smriti opens a fresh database for the first time, it now properly initializes QMD's store tables (content, documents, content_vectors) and loads the sqlite-vec extension, in addition to memory tables. This fixes the 'no such table: content_vectors' error that occurred when running smriti status in fresh CI environments. - Added initializeQmdStore() to setup all required QMD tables - Content-addressable storage (content table) - Document indexing (documents table) - Vector embeddings support (content_vectors, vectors_vec tables) - Proper sqlite-vec extension loading Fixes Install Test failure on all platforms. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
The install test runs in a fresh CI environment with no Claude Code sessions, so 'smriti ingest claude' failing is expected and OK. Changed continue-on-error to true for this step to match the intent described in the step comment 'no sessions OK'. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Document the CI debugging journey and the monitoring script we used to rapidly iterate through three separate bugs in a tight feedback loop: - Database directory creation - QMD store table initialization - Workflow configuration The story highlights how real-time GitHub Actions monitoring with gh CLI enabled 3-5 minute iteration cycles instead of waiting for batch feedback. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Convert all UTC timestamps in the v0.3.1 monitoring loop story to IST (Indian Standard Time, UTC+5:30) for better local context. Timeline now shows: - 20:32 IST: PR merged - 20:40 IST: First error - 20:43 IST: Second error - 20:50 IST: Third error - 21:07 IST: All platforms passing Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
fix(db): handle Windows mkdir edge case for current directory
The smriti_session_meta table has a FOREIGN KEY on agent_id referencing smriti_agents, but only claude-code, codex, and cursor were seeded. This caused FK constraint failures when ingesting copilot or cline sessions on a clean database. Closes #30 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The smriti_session_meta table has a FOREIGN KEY on agent_id referencing smriti_agents, but only claude-code, codex, and cursor were seeded. This caused FK constraint failures when ingesting copilot or cline sessions on a clean database. Closes #30 Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add v0.3.2 changelog entry for copilot/cline FK fix - Release workflow now falls back to GitHub auto-generated notes when CHANGELOG has no entry for the tagged version Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace manual CHANGELOG extraction with automatic generation from merged PRs using gh CLI. PRs are categorized by conventional commit prefix (fix/feat/chore/docs) and committed back to main. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore: new branch (#33) * fix(ci): bench scorecard ci windows fixes (#34) * ci: auto-template and title for dev to main PRs * release: v0.3.2 (dev -> main) (#35) * New branch (#33) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * Feature/bench scorecard ci windows fixes (#34) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * CI: run full test matrix only on merge branches * CI: auto-create draft prerelease on successful dev CI * CI: auto-template and title for dev to main PRs * ci: create dev draft release after successful dev test matrix * chore: add e2e dev release flow test marker (#36) * release: v0.3.2 (dev -> main) (#37) * New branch (#33) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * Feature/bench scorecard ci windows fixes (#34) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * CI: run full test matrix only on merge branches * CI: auto-create draft prerelease on successful dev CI * CI: auto-template and title for dev to main PRs * CI: create dev draft release after successful dev test matrix * chore: add e2e dev release flow test marker (#36) * docs: update CHANGELOG.md for v0.4.0 [skip ci] * docs: add CI/release workflow architecture and north-star plan * ci: add commit lint, semver metadata, and deterministic release notes * docs: finalize workflow policy docs without backlog sections * ci: scope commit lint to pull request commit ranges only * fix(ci): setup bun before dev draft release metadata step * fix(ci): allow legacy non-conventional history for dev draft metadata * fix(release): align dev-main PR version with latest stable tag * ci: improve workflow and check naming for PR readability * ci: skip PR test job for dev to main release PRs * fix(ci): use import.meta.dir for cross-platform path resolution new URL(import.meta.url).pathname produces /D:/a/... on Windows, causing ENOENT errors. import.meta.dir is Bun's cross-platform alternative. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ci: add auto-release job for main branch merges After tests pass on main, automatically compute the next semver version and create a GitHub release. Handles squash merges (which lose individual commit types) by defaulting to patch when commits exist but bump is "none". Skips if HEAD is already tagged. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Baseline User <baseline@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Previous squash merge body contained [skip ci] from an old commit message, which prevented GitHub Actions from running. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore: migrate pre-commit config to non-deprecated stage names Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: overhaul documentation structure and tone - Rewrite README with vision-first framing — leads with the agentic memory problem, origin story, and Ingest→Categorize→Recall→Search as the central concept - Add docs/cli.md as the complete command reference (moved out of README) - Add docs/search.md as a user-facing guide to search vs recall - Rewrite all user-facing docs (getting-started, team-sharing, configuration, architecture) to match README tone — direct, honest, opens with context before diving into mechanics - Reorganize docs structure: kebab-case throughout, internal planning docs move to docs/internal/, personal writing gitignored via docs/writing/ - Rename: CI_HARDENING_EXECUTION_PLAN → internal/ci-hardening, DESIGN → internal/design, WORKFLOW_AUTOMATION → internal/workflow-automation, e2e-dev-release-flow-test → internal/e2e-release-flow, search-recall-architecture → internal/search-analysis - Update .gitignore: add docs/writing/, .letta/, zsh plugins 👾 Generated with [Letta Code](https://letta.com) Co-Authored-By: Letta <noreply@letta.com> --------- Co-authored-by: Baseline User <baseline@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: Letta <noreply@letta.com>
* chore: new branch (#33) * fix(ci): bench scorecard ci windows fixes (#34) * ci: auto-template and title for dev to main PRs * release: v0.3.2 (dev -> main) (#35) * New branch (#33) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * Feature/bench scorecard ci windows fixes (#34) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * CI: run full test matrix only on merge branches * CI: auto-create draft prerelease on successful dev CI * CI: auto-template and title for dev to main PRs * ci: create dev draft release after successful dev test matrix * chore: add e2e dev release flow test marker (#36) * release: v0.3.2 (dev -> main) (#37) * New branch (#33) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * Feature/bench scorecard ci windows fixes (#34) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * CI: run full test matrix only on merge branches * CI: auto-create draft prerelease on successful dev CI * CI: auto-template and title for dev to main PRs * CI: create dev draft release after successful dev test matrix * chore: add e2e dev release flow test marker (#36) * docs: update CHANGELOG.md for v0.4.0 [skip ci] * docs: add CI/release workflow architecture and north-star plan * ci: add commit lint, semver metadata, and deterministic release notes * docs: finalize workflow policy docs without backlog sections * ci: scope commit lint to pull request commit ranges only * fix(ci): setup bun before dev draft release metadata step * fix(ci): allow legacy non-conventional history for dev draft metadata * fix(release): align dev-main PR version with latest stable tag * ci: improve workflow and check naming for PR readability * ci: skip PR test job for dev to main release PRs * fix(ci): use import.meta.dir for cross-platform path resolution new URL(import.meta.url).pathname produces /D:/a/... on Windows, causing ENOENT errors. import.meta.dir is Bun's cross-platform alternative. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ci: add auto-release job for main branch merges After tests pass on main, automatically compute the next semver version and create a GitHub release. Handles squash merges (which lose individual commit types) by defaulting to patch when commits exist but bump is "none". Skips if HEAD is already tagged. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: overhaul documentation structure and tone (#43) * chore: migrate pre-commit config to non-deprecated stage names Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: overhaul documentation structure and tone - Rewrite README with vision-first framing — leads with the agentic memory problem, origin story, and Ingest→Categorize→Recall→Search as the central concept - Add docs/cli.md as the complete command reference (moved out of README) - Add docs/search.md as a user-facing guide to search vs recall - Rewrite all user-facing docs (getting-started, team-sharing, configuration, architecture) to match README tone — direct, honest, opens with context before diving into mechanics - Reorganize docs structure: kebab-case throughout, internal planning docs move to docs/internal/, personal writing gitignored via docs/writing/ - Rename: CI_HARDENING_EXECUTION_PLAN → internal/ci-hardening, DESIGN → internal/design, WORKFLOW_AUTOMATION → internal/workflow-automation, e2e-dev-release-flow-test → internal/e2e-release-flow, search-recall-architecture → internal/search-analysis - Update .gitignore: add docs/writing/, .letta/, zsh plugins 👾 Generated with [Letta Code](https://letta.com) Co-Authored-By: Letta <noreply@letta.com> --------- Co-authored-by: Baseline User <baseline@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: Letta <noreply@letta.com> --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Baseline User <baseline@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: Letta <noreply@letta.com>
* chore: migrate pre-commit config to non-deprecated stage names Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: overhaul documentation structure and tone - Rewrite README with vision-first framing — leads with the agentic memory problem, origin story, and Ingest→Categorize→Recall→Search as the central concept - Add docs/cli.md as the complete command reference (moved out of README) - Add docs/search.md as a user-facing guide to search vs recall - Rewrite all user-facing docs (getting-started, team-sharing, configuration, architecture) to match README tone — direct, honest, opens with context before diving into mechanics - Reorganize docs structure: kebab-case throughout, internal planning docs move to docs/internal/, personal writing gitignored via docs/writing/ - Rename: CI_HARDENING_EXECUTION_PLAN → internal/ci-hardening, DESIGN → internal/design, WORKFLOW_AUTOMATION → internal/workflow-automation, e2e-dev-release-flow-test → internal/e2e-release-flow, search-recall-architecture → internal/search-analysis - Update .gitignore: add docs/writing/, .letta/, zsh plugins 👾 Generated with [Letta Code](https://letta.com) Co-Authored-By: Letta <noreply@letta.com> * chore: clean up project root — move docs to docs/internal/, remove clutter Move 9 root-level docs to docs/internal/ with kebab-case rename: IMPLEMENTATION.md → docs/internal/implementation.md IMPLEMENTATION_CHECKLIST.md → docs/internal/implementation-checklist.md PHASE1_IMPLEMENTATION.md → docs/internal/phase1-implementation.md INGEST_ARCHITECTURE.md → docs/internal/ingest-architecture.md DEMO_RESULTS.md → docs/internal/demo-results.md RULES_QUICK_REFERENCE.md → docs/internal/rules-quick-reference.md QUICKSTART.md → docs/internal/segmentation-quickstart.md majestic-sauteeing-papert.md → docs/internal/qmd-deep-dive.md streamed-humming-curry.md → docs/internal/ingest-refactoring.md Remove: issues.json — GitHub issues export, not source or documentation zsh-autosuggestions/, zsh-syntax-highlighting/ — personal zsh plugins, unrelated to the project (already gitignored) Update references to INGEST_ARCHITECTURE.md in README.md and CLAUDE.md. Project root now contains only what belongs there: README, LICENSE, CHANGELOG, CLAUDE.md, package.json, install/uninstall scripts, and source directories. * feat(claude): add proactive memory behavior directives to CLAUDE.md Adds a Memory section at the top of CLAUDE.md that instructs Claude Code to use Smriti actively — not passively. Modeled on the Loop pattern: action-first, not acknowledgment-first. - Recall at session start before writing code - Recognize decision/finalization moments and act immediately - Concrete wrong/right example with actual bash commands - Category guide for correct tagging - No asking permission — just save it --------- Co-authored-by: Baseline User <baseline@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: Letta <noreply@letta.com>
Add MODEL_PRICING map for Claude model families, estimateCost() for per-turn USD estimation, wire estimated_cost_usd into upsertSessionCosts, and add deleteSidecarRows() for force re-ingest cleanup. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Thread force option through all agent ingest paths. When enabled, deletes existing sidecar rows before re-processing to refresh tool usage, costs, errors, and file operations. Adds tool correlation map for linking tool calls to their results. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New src/insights/ module with query functions for overview dashboard, session deep-dives, project analysis, cost breakdowns, error analysis, and tool reliability metrics. Wire CLI subcommands: smriti insights [session|project|costs|errors|tools]. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* release: v0.4.1 (#42) * chore: new branch (#33) * fix(ci): bench scorecard ci windows fixes (#34) * ci: auto-template and title for dev to main PRs * release: v0.3.2 (dev -> main) (#35) * New branch (#33) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * Feature/bench scorecard ci windows fixes (#34) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * CI: run full test matrix only on merge branches * CI: auto-create draft prerelease on successful dev CI * CI: auto-template and title for dev to main PRs * ci: create dev draft release after successful dev test matrix * chore: add e2e dev release flow test marker (#36) * release: v0.3.2 (dev -> main) (#37) * New branch (#33) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * Feature/bench scorecard ci windows fixes (#34) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * CI: run full test matrix only on merge branches * CI: auto-create draft prerelease on successful dev CI * CI: auto-template and title for dev to main PRs * CI: create dev draft release after successful dev test matrix * chore: add e2e dev release flow test marker (#36) * docs: update CHANGELOG.md for v0.4.0 [skip ci] * docs: add CI/release workflow architecture and north-star plan * ci: add commit lint, semver metadata, and deterministic release notes * docs: finalize workflow policy docs without backlog sections * ci: scope commit lint to pull request commit ranges only * fix(ci): setup bun before dev draft release metadata step * fix(ci): allow legacy non-conventional history for dev draft metadata * fix(release): align dev-main PR version with latest stable tag * ci: improve workflow and check naming for PR readability * ci: skip PR test job for dev to main release PRs * fix(ci): use import.meta.dir for cross-platform path resolution new URL(import.meta.url).pathname produces /D:/a/... on Windows, causing ENOENT errors. import.meta.dir is Bun's cross-platform alternative. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ci: add auto-release job for main branch merges After tests pass on main, automatically compute the next semver version and create a GitHub release. Handles squash merges (which lose individual commit types) by defaulting to patch when commits exist but bump is "none". Skips if HEAD is already tagged. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Baseline User <baseline@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * ci: trigger auto-release workflow on main Previous squash merge body contained [skip ci] from an old commit message, which prevented GitHub Actions from running. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: reorganize documentation structure and improve narrative Move internal design docs to docs/internal/, rewrite README with narrative-first approach, expand CLI reference, add search docs, improve getting-started and team-sharing guides. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Baseline User <baseline@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* release: v0.4.1 (#42) * chore: new branch (#33) * fix(ci): bench scorecard ci windows fixes (#34) * ci: auto-template and title for dev to main PRs * release: v0.3.2 (dev -> main) (#35) * New branch (#33) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * Feature/bench scorecard ci windows fixes (#34) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * CI: run full test matrix only on merge branches * CI: auto-create draft prerelease on successful dev CI * CI: auto-template and title for dev to main PRs * ci: create dev draft release after successful dev test matrix * chore: add e2e dev release flow test marker (#36) * release: v0.3.2 (dev -> main) (#37) * New branch (#33) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * Feature/bench scorecard ci windows fixes (#34) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * CI: run full test matrix only on merge branches * CI: auto-create draft prerelease on successful dev CI * CI: auto-template and title for dev to main PRs * CI: create dev draft release after successful dev test matrix * chore: add e2e dev release flow test marker (#36) * docs: update CHANGELOG.md for v0.4.0 [skip ci] * docs: add CI/release workflow architecture and north-star plan * ci: add commit lint, semver metadata, and deterministic release notes * docs: finalize workflow policy docs without backlog sections * ci: scope commit lint to pull request commit ranges only * fix(ci): setup bun before dev draft release metadata step * fix(ci): allow legacy non-conventional history for dev draft metadata * fix(release): align dev-main PR version with latest stable tag * ci: improve workflow and check naming for PR readability * ci: skip PR test job for dev to main release PRs * fix(ci): use import.meta.dir for cross-platform path resolution new URL(import.meta.url).pathname produces /D:/a/... on Windows, causing ENOENT errors. import.meta.dir is Bun's cross-platform alternative. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ci: add auto-release job for main branch merges After tests pass on main, automatically compute the next semver version and create a GitHub release. Handles squash merges (which lose individual commit types) by defaulting to patch when commits exist but bump is "none". Skips if HEAD is already tagged. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Baseline User <baseline@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * ci: trigger auto-release workflow on main Previous squash merge body contained [skip ci] from an old commit message, which prevented GitHub Actions from running. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs(claude): add proactive memory behavior directives to CLAUDE.md Add structured guidance for AI sessions to proactively save decisions, recognize save-worthy moments, and use consistent category tagging. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Baseline User <baseline@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* release: v0.4.1 (#42) * chore: new branch (#33) * fix(ci): bench scorecard ci windows fixes (#34) * ci: auto-template and title for dev to main PRs * release: v0.3.2 (dev -> main) (#35) * New branch (#33) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * Feature/bench scorecard ci windows fixes (#34) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * CI: run full test matrix only on merge branches * CI: auto-create draft prerelease on successful dev CI * CI: auto-template and title for dev to main PRs * ci: create dev draft release after successful dev test matrix * chore: add e2e dev release flow test marker (#36) * release: v0.3.2 (dev -> main) (#37) * New branch (#33) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * Feature/bench scorecard ci windows fixes (#34) * chore: add pending project files * refactor(ingest): centralize ingestion via parser/resolver/store layers * docs: document layered ingest architecture * test(perf): add qmd benchmark harness and non-blocking CI regression check * perf(bench): add ingest hotpath benchmark and record qmd optimization * perf(ingest): batch session writes and add stable benchmark tooling * Add benchmark scorecard to CI summary and sticky PR comment * Fix bench import path and temporarily disable design-contract workflow * CI: checkout qmd submodule in perf bench workflow * Fix Windows path handling in ingest session discovery * CI: run full test matrix only on merge branches * CI: auto-create draft prerelease on successful dev CI * CI: auto-template and title for dev to main PRs * CI: create dev draft release after successful dev test matrix * chore: add e2e dev release flow test marker (#36) * docs: update CHANGELOG.md for v0.4.0 [skip ci] * docs: add CI/release workflow architecture and north-star plan * ci: add commit lint, semver metadata, and deterministic release notes * docs: finalize workflow policy docs without backlog sections * ci: scope commit lint to pull request commit ranges only * fix(ci): setup bun before dev draft release metadata step * fix(ci): allow legacy non-conventional history for dev draft metadata * fix(release): align dev-main PR version with latest stable tag * ci: improve workflow and check naming for PR readability * ci: skip PR test job for dev to main release PRs * fix(ci): use import.meta.dir for cross-platform path resolution new URL(import.meta.url).pathname produces /D:/a/... on Windows, causing ENOENT errors. import.meta.dir is Bun's cross-platform alternative. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ci: add auto-release job for main branch merges After tests pass on main, automatically compute the next semver version and create a GitHub release. Handles squash merges (which lose individual commit types) by defaulting to patch when commits exist but bump is "none". Skips if HEAD is already tagged. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Baseline User <baseline@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * ci: trigger auto-release workflow on main Previous squash merge body contained [skip ci] from an old commit message, which prevented GitHub Actions from running. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat(db): add model-aware cost estimation and sidecar cleanup Add MODEL_PRICING map for Claude model families, estimateCost() for per-turn USD estimation, wire estimated_cost_usd into upsertSessionCosts, and add deleteSidecarRows() for force re-ingest cleanup. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Baseline User <baseline@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Priority 1 - Fix broken things:
- Rewrite test/team.test.ts with bun:test (was using console.assert, wrong imports)
- Fix unit-level dedup in share.ts (was matching on random UUID, now content_hash only)
- Fix duration calculation in segment.ts (use actual timestamps, not messageCount/2)
- Fix replace() → replaceAll() for nested category paths in share.ts
Priority 2 - Code quality:
- Extract shared callOllama() to src/team/ollama.ts with timeout + retry
- Extract shared slugify/datePrefix to src/team/utils.ts
- DRY up share.ts: extract resolveOutputDir, querySessions, writeManifest helpers
- Use isValidCategory from categorize/schema.ts instead of duplicate in segment.ts
- Remove unused SMRITI_DIR import from document.ts
Priority 3 - Test coverage:
- Replace misleading tests in team-segmented.test.ts with mocked Ollama tests
- Add generateDocument, generateDocumentsSequential, and fallback path tests
- Add real DB validation tests using isValidCategory
Priority 4 - Sync integration:
- Fix sync.ts to handle Stage 2 structured output (pipeline: segmented flag)
- Segmented knowledge docs are no longer write-only
Priority 5 - Prompt improvements:
- Constrain Stage 1 to use only listed categories (remove "other valid" text)
- Add {{title}} placeholder and heading instruction to all Stage 2 templates
- Remove hallucination-prone "Links to further reading" from topic template
Also adds docs/demo-script.md showing the full smriti workflow story.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… segmented sync feat(team): harden share pipeline — Ollama client, helper extraction, segmented sync
Keep expanded Bun cache paths from v0.3.1-version-command and frozen-lockfile comment from v0.3.1-install-submodules.
Contributor
Benchmark Scorecard (ci-small)Bench Scorecard (ci-small)threshold: 20.00%
Summary: WARN (4 metrics) |
Enhanced the v0.6.0 entry with detailed breakdowns of: - Major features (sidecar search, cost estimation, ingest force mode) - Infrastructure improvements (database, CI/release pipeline, install) - Documentation updates - Release progression from v0.3.0 to v0.6.0 Includes feature descriptions, CLI flags, and technical details for user reference and release documentation.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release Summary
devmaindevtomainChanges Included
Validation
devNotes